package core.collection.mylist;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * 并发修改异常产生的原因及解决方案
 *
 * @author
 * @create 2018-12-23 9:09
 **/
public class mylist_3_List_ListIterator {
    public static void main(String[] args){
        //demo_solution();
        demo_previous();
    }

    public static void demo_exception(){
        List list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        Iterator it = list.iterator();
        while (it.hasNext()){
            if("b".equals(it.next())){
                list.add("b");
                //遍历的同时增加元素 并发修改 ConcurrentModificationException
            }
        }
    }

    public static void demo_solution(){
        /**
         * 1、迭代器迭代元素，迭代器修改元素（ListIterator的特有功能add）
         * 2、集合遍历元素，集合修改元素
         */
        List list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        ListIterator lit = list.listIterator();
        //获取list集合特有的迭代器
        while (lit.hasNext()){
            if("b".equals(lit.next())){

                //list.add("hello b");
                //遍历的同时用集合的方法增加元素 并发修改 ConcurrentModificationException

                lit.add("hello b");
            }
        }
        System.out.println(list);
    }

    public static void demo_previous(){
        List list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        ListIterator lit = list.listIterator();
        while (lit.hasNext()){
            System.out.println(lit.next());
        }
        System.out.println("==================");
        while (lit.hasPrevious()){
            System.out.println(lit.previous());
        }
    }
}
